/* 
泛型接口
*/

 /* 
  1. 声明泛型类型: 在接口名的右侧  <T>   // T K V
  2. 使用泛型: 接口体中
  3. 指定泛型的具体类型: 定义实现时, 接口名的右侧 <具体类型>
  */

  // 定义一个类，这个类是专门对数据进行增删改查的工具类
  // 可以实例化一个对象用来保管数据
  // 保管数据的话 需要一个接口限定

  class User {
    id:number
    name: string; //姓名
    age: number; //年龄
  
    constructor (name, age, id) {
      this.id = id
      this.name = name
      this.age = age
    }
  }





  interface IbaseCRUD <T>{
    data: T[]
    add: (t:T) => void
    getById: (id: number) => T
  }
  
  
  // 管理工具类
  // 实例化这个类我就可以拿到一个工具对象用来管理东西
  class UserCRUD implements IbaseCRUD<User>{
    data :User[] = []
    add(u:User): void {
      this.data.push(u)
    }
    getById(id: number) {
      return this.data.find((item:User) => item.id===id)
    }
  }

  // let a = new CRUD()

  // let u1 = new User('zhaoliying',35,1)
  // let u2 = new User('yangmi',36,2)


  // a.add(u1)
  // a.add(u2)

  // console.log(a.getById(1));
   


  
   











  

 
  
  



  
  
 
